using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._RasterProperties
{
    /// <summary>
    /// <para>Set Raster Properties</para>
    /// <para>Sets the data type, statistics, and NoData values on a raster or mosaic dataset.</para>
    /// <para>设置栅格或镶嵌数据集上的数据类型、统计数据和 NoData 值。</para>
    /// </summary>    
    [DisplayName("Set Raster Properties")]
    public class SetRasterProperties : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SetRasterProperties()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_raster">
        /// <para>Input Raster</para>
        /// <para>The raster or mosaic dataset whose properties you want to set.</para>
        /// <para>要设置其属性的栅格或镶嵌数据集。</para>
        /// </param>
        public SetRasterProperties(object _in_raster)
        {
            this._in_raster = _in_raster;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Set Raster Properties";

        public override string CallName => "management.SetRasterProperties";

        public override List<string> AcceptEnvironments => ["scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_raster, _data_type.GetGPValue(), _statistics, _stats_file, _nodata, _key_properties, _out_raster];

        /// <summary>
        /// <para>Input Raster</para>
        /// <para>The raster or mosaic dataset whose properties you want to set.</para>
        /// <para>要设置其属性的栅格或镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_raster { get; set; }


        /// <summary>
        /// <para>Data Source Type</para>
        /// <para><xdoc>
        ///   <para>The type of imagery in the mosaic dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Generic— The mosaic dataset does not have a specified data type.</bullet_item><para/>
        ///     <bullet_item>Elevation— The mosaic dataset contains elevation data.</bullet_item><para/>
        ///     <bullet_item>Thematic—Thematic data has discrete values, such as land cover.</bullet_item><para/>
        ///     <bullet_item>Processed—The mosaic dataset has been color balanced.</bullet_item><para/>
        ///     <bullet_item>Scientific—The data has scientific information, and will be displayed with the blue to red color ramp, by default.</bullet_item><para/>
        ///     <bullet_item>Vector UV—The data is a two band raster that contains a U and a V component of vector field data.</bullet_item><para/>
        ///     <bullet_item>Magnitude and Direction—The data is a two band raster that contains the magnitude and direction of vector field data.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>镶嵌数据集中的影像类型。</para>
        ///   <bulletList>
        ///     <bullet_item>通用 - 镶嵌数据集没有指定的数据类型。</bullet_item><para/>
        ///     <bullet_item>高程 - 镶嵌数据集包含高程数据。</bullet_item><para/>
        ///     <bullet_item>专题 - 专题数据具有离散值，例如土地覆被。</bullet_item><para/>
        ///     <bullet_item>已处理 - 镶嵌数据集已进行颜色平衡。</bullet_item><para/>
        ///     <bullet_item>科学 - 数据包含科学信息，默认情况下将以蓝色到红色色带显示。</bullet_item><para/>
        ///     <bullet_item>矢量 UV - 数据为包含矢量场数据的 U 和 V 分量的双波段栅格。</bullet_item><para/>
        ///     <bullet_item>幅度和方向 - 数据为包含矢量场数据的幅度和方向的双波段栅格。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Source Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _data_type_value? _data_type { get; set; } = null;

        public enum _data_type_value
        {
            /// <summary>
            /// <para>Generic</para>
            /// <para>Generic— The mosaic dataset does not have a specified data type.</para>
            /// <para>通用 - 镶嵌数据集没有指定的数据类型。</para>
            /// </summary>
            [Description("Generic")]
            [GPEnumValue("GENERIC")]
            _GENERIC,

            /// <summary>
            /// <para>Elevation</para>
            /// <para>Elevation— The mosaic dataset contains elevation data.</para>
            /// <para>高程 - 镶嵌数据集包含高程数据。</para>
            /// </summary>
            [Description("Elevation")]
            [GPEnumValue("ELEVATION")]
            _ELEVATION,

            /// <summary>
            /// <para>Thematic</para>
            /// <para>Thematic—Thematic data has discrete values, such as land cover.</para>
            /// <para>专题 - 专题数据具有离散值，例如土地覆被。</para>
            /// </summary>
            [Description("Thematic")]
            [GPEnumValue("THEMATIC")]
            _THEMATIC,

            /// <summary>
            /// <para>Processed</para>
            /// <para>Processed—The mosaic dataset has been color balanced.</para>
            /// <para>已处理 - 镶嵌数据集已进行颜色平衡。</para>
            /// </summary>
            [Description("Processed")]
            [GPEnumValue("PROCESSED")]
            _PROCESSED,

            /// <summary>
            /// <para>Scientific</para>
            /// <para>Scientific—The data has scientific information, and will be displayed with the blue to red color ramp, by default.</para>
            /// <para>科学 - 数据包含科学信息，默认情况下将以蓝色到红色色带显示。</para>
            /// </summary>
            [Description("Scientific")]
            [GPEnumValue("SCIENTIFIC")]
            _SCIENTIFIC,

            /// <summary>
            /// <para>Vector UV</para>
            /// <para>Vector UV—The data is a two band raster that contains a U and a V component of vector field data.</para>
            /// <para>矢量 UV - 数据为包含矢量场数据的 U 和 V 分量的双波段栅格。</para>
            /// </summary>
            [Description("Vector UV")]
            [GPEnumValue("VECTOR_UV")]
            _VECTOR_UV,

            /// <summary>
            /// <para>Magnitude and Direction</para>
            /// <para>Magnitude and Direction—The data is a two band raster that contains the magnitude and direction of vector field data.</para>
            /// <para>幅度和方向 - 数据为包含矢量场数据的幅度和方向的双波段栅格。</para>
            /// </summary>
            [Description("Magnitude and Direction")]
            [GPEnumValue("VECTOR_MAGDIR")]
            _VECTOR_MAGDIR,

        }

        /// <summary>
        /// <para>Statistics Per Band</para>
        /// <para>Specify the bands and values for the minimum, maximum, mean, and standard deviation.</para>
        /// <para>指定最小值、最大值、平均值和标准差的波段和值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Statistics Per Band")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _statistics { get; set; } = null;


        /// <summary>
        /// <para>Import Statistics From File</para>
        /// <para>An .xml file that contains the statistics.</para>
        /// <para>包含统计信息的.xml文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Import Statistics From File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _stats_file { get; set; } = null;


        /// <summary>
        /// <para>Bands for NoData Value</para>
        /// <para><xdoc>
        ///   <para>Specify the NoData value for each band. Each band can have a unique NoData value defined, or the same value can be specified for all bands.</para>
        ///   <para>Choose the band from the NoData drop-down arrow and click the Add button to add this to the table. Then enter a value or multiple values. If you choose multiple NoData values, separate each value with a space.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定每个波段的 NoData 值。每个波段可以定义唯一的 NoData 值，也可以为所有波段指定相同的值。</para>
        ///   <para>从 NoData 下拉箭头中选择波段，然后单击“添加”按钮将其添加到表中。然后输入一个或多个值。如果选择多个 NoData 值，请用空格分隔每个值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Bands for NoData Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _nodata { get; set; } = null;


        /// <summary>
        /// <para>Key Properties</para>
        /// <para><xdoc>
        ///   <para>The natively supported properties are as follows. Your data may have additional properties not included in this list. All properties are case insensitive.</para>
        ///   <bulletList>
        ///     <bullet_item>AcquisitionDate</bullet_item><para/>
        ///     <bullet_item>BandName</bullet_item><para/>
        ///     <bullet_item>BlockName</bullet_item><para/>
        ///     <bullet_item>CloudCover</bullet_item><para/>
        ///     <bullet_item>DatasetTag</bullet_item><para/>
        ///     <bullet_item>Dimensions</bullet_item><para/>
        ///     <bullet_item>FlowDirection</bullet_item><para/>
        ///     <bullet_item>Footprint</bullet_item><para/>
        ///     <bullet_item>HighCellSize</bullet_item><para/>
        ///     <bullet_item>LowCellSize</bullet_item><para/>
        ///     <bullet_item>MinCellSize</bullet_item><para/>
        ///     <bullet_item>MaxCellSize</bullet_item><para/>
        ///     <bullet_item>OffNadir</bullet_item><para/>
        ///     <bullet_item>ParentRasterType</bullet_item><para/>
        ///     <bullet_item>ParentTemplate</bullet_item><para/>
        ///     <bullet_item>PerspectiveX</bullet_item><para/>
        ///     <bullet_item>PerspectiveY</bullet_item><para/>
        ///     <bullet_item>PerspectiveZ</bullet_item><para/>
        ///     <bullet_item>ProductName</bullet_item><para/>
        ///     <bullet_item>RadianceBias</bullet_item><para/>
        ///     <bullet_item>RadianceGain</bullet_item><para/>
        ///     <bullet_item>ReflectanceBias</bullet_item><para/>
        ///     <bullet_item>RefelctanceGain</bullet_item><para/>
        ///     <bullet_item>Segmented</bullet_item><para/>
        ///     <bullet_item>SensorAzimuth</bullet_item><para/>
        ///     <bullet_item>SensorElevation</bullet_item><para/>
        ///     <bullet_item>SensorName</bullet_item><para/>
        ///     <bullet_item>SolarIrradiance</bullet_item><para/>
        ///     <bullet_item>SourceBandIndex</bullet_item><para/>
        ///     <bullet_item>StdPressure</bullet_item><para/>
        ///     <bullet_item>StdPressure_Max</bullet_item><para/>
        ///     <bullet_item>StdTemperature</bullet_item><para/>
        ///     <bullet_item>StdTemperature_Max</bullet_item><para/>
        ///     <bullet_item>StdTime</bullet_item><para/>
        ///     <bullet_item>StdTime_Max</bullet_item><para/>
        ///     <bullet_item>StdZ</bullet_item><para/>
        ///     <bullet_item>StdZ_max</bullet_item><para/>
        ///     <bullet_item>SunAzimuth</bullet_item><para/>
        ///     <bullet_item>SunElevation</bullet_item><para/>
        ///     <bullet_item>ThermalConstant_K1</bullet_item><para/>
        ///     <bullet_item>ThermalConstant_K2</bullet_item><para/>
        ///     <bullet_item>Variable</bullet_item><para/>
        ///     <bullet_item>VerticalAccuracy</bullet_item><para/>
        ///     <bullet_item>WavelengthMin</bullet_item><para/>
        ///     <bullet_item>WavelengthMax</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>本机支持的属性如下所示。您的数据可能包含此列表中未包含的其他属性。所有属性都不区分大小写。</para>
        ///   <bulletList>
        ///     <bullet_item>收购日期</bullet_item><para/>
        ///     <bullet_item>乐队名称</bullet_item><para/>
        ///     <bullet_item>区块名称</bullet_item><para/>
        ///     <bullet_item>云盖</bullet_item><para/>
        ///     <bullet_item>数据集标签</bullet_item><para/>
        ///     <bullet_item>尺寸</bullet_item><para/>
        ///     <bullet_item>流向</bullet_item><para/>
        ///     <bullet_item>脚印</bullet_item><para/>
        ///     <bullet_item>HighCellSize</bullet_item><para/>
        ///     <bullet_item>LowCellSize</bullet_item><para/>
        ///     <bullet_item>MinCellSize的</bullet_item><para/>
        ///     <bullet_item>MaxCellSize</bullet_item><para/>
        ///     <bullet_item>OffNadir （英语：OffNadir）</bullet_item><para/>
        ///     <bullet_item>ParentRasterType</bullet_item><para/>
        ///     <bullet_item>父模板</bullet_item><para/>
        ///     <bullet_item>透视X</bullet_item><para/>
        ///     <bullet_item>透视Y</bullet_item><para/>
        ///     <bullet_item>透视Z</bullet_item><para/>
        ///     <bullet_item>产品名称</bullet_item><para/>
        ///     <bullet_item>辐射偏差</bullet_item><para/>
        ///     <bullet_item>辐射增益</bullet_item><para/>
        ///     <bullet_item>反射率偏差</bullet_item><para/>
        ///     <bullet_item>参考增益</bullet_item><para/>
        ///     <bullet_item>分段</bullet_item><para/>
        ///     <bullet_item>传感器方位角</bullet_item><para/>
        ///     <bullet_item>传感器高程</bullet_item><para/>
        ///     <bullet_item>传感器名称</bullet_item><para/>
        ///     <bullet_item>太阳辐照度</bullet_item><para/>
        ///     <bullet_item>源BandIndex</bullet_item><para/>
        ///     <bullet_item>标准压力</bullet_item><para/>
        ///     <bullet_item>StdPressure_Max</bullet_item><para/>
        ///     <bullet_item>标准温度</bullet_item><para/>
        ///     <bullet_item>StdTemperature_Max</bullet_item><para/>
        ///     <bullet_item>标准时间</bullet_item><para/>
        ///     <bullet_item>StdTime_Max</bullet_item><para/>
        ///     <bullet_item>标准Z（标准）</bullet_item><para/>
        ///     <bullet_item>StdZ_max</bullet_item><para/>
        ///     <bullet_item>太阳方位角</bullet_item><para/>
        ///     <bullet_item>太阳海拔</bullet_item><para/>
        ///     <bullet_item>ThermalConstant_K1</bullet_item><para/>
        ///     <bullet_item>ThermalConstant_K2</bullet_item><para/>
        ///     <bullet_item>变量</bullet_item><para/>
        ///     <bullet_item>垂直精度</bullet_item><para/>
        ///     <bullet_item>波长最小值</bullet_item><para/>
        ///     <bullet_item>波长最大</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Key Properties")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _key_properties { get; set; } = null;


        /// <summary>
        /// <para>Updated Raster Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Raster Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_raster { get; set; }


        public SetRasterProperties SetEnv(object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}